Android Tips #17 Android SDK の便利な Util クラス
はじめに
Android SDK には、面倒であったり、冗長になりがちな処理を行なってくれる Util クラスが数多く存在します。 意外と知られていない便利な Util クラスもあります。 ということで、Androidアプリを開発する上でぜひ使っていきたい便利な Util クラスをまとめました。
TextUtils
http://developer.android.com/reference/android/text/TextUtils.html
String の Util クラスです。 isEmpty は String の null と length = 0 をまとめてチェックしてくれます。このあたりはよく必要になるんじゃないでしょうか。その他にも、2つの String が同じ値か比較する equals や、 String を区切る split など、標準的な String を加工するメソッドがあります。
使用例
String msg = "こんにちは"; boolean isEmpty = TextUtils.isEmpty(msg); Log.d("sample", String.valueOf(isEmpty)); // false
Linkify
http://developer.android.com/reference/android/text/util/Linkify.html
String 内のURL・電話番号・メールアドレス・地図情報にリンクを付けてくれる Util クラスです。 マッチした文字列にリンクを付ける(例えば、サイト名にリンクを貼る)などということもできます。
使用例
TextView view = (TextView) findViewById(R.id.text_view); String text = "クラスメソッドのWebサイトは http://classmethod.jp です。"; view.setText(text); Linkify.addLinks(view, Linkify.ALL);
DateUtils
http://developer.android.com/reference/android/text/format/DateUtils.html
日付を任意の形式にフォーマットしてくれる Util クラスです。 フラグを設定するだけで、年や日付、時間などの形式にフォーマットすることができます。また、ある時間とある時間の期間を示す文字列(「9月30日〜10月1日」などのような文字列)を指定形式にフォーマットすることもできます。
使用例
Time now = new Time(); now.setToNow(); long millis = now.toMillis(false); String date = DateUtils.formatDateTime(this, millis, DateUtils.FORMAT_SHOW_DATE); String time = DateUtils.formatDateTime(this, millis, DateUtils.FORMAT_SHOW_TIME); String weekDay = DateUtils.formatDateTime(this, millis, DateUtils.FORMAT_SHOW_WEEKDAY); Log.d(TAG, date); // 10月1日 Log.d(TAG, time); // 12:04 Log.d(TAG, weekDay); // 月
Formatter
http://developer.android.com/reference/android/text/format/Formatter.html
ある値を任意の形式にフォーマットしてくれる Util クラスです。 現在のところは long 値をファイルサイズ(B, KB, MB,...)の形式に変換するメソッドのみのようです(IPアドレスを変換してくれるメソッドがありましたが、現在は非推奨)。
使用例
String size = Formatter.formatFileSize(getApplicationContext(), 128000); Log.d(size, size); // 125KB
Pair
http://developer.android.com/reference/android/util/Pair.html
2つの値を保持することができる Util クラスです。 例えばサイト名とURLをひとつのオブジェクトで保持する、などのような使いかたができます。型も自由に決めることができるのでとても便利なクラスです。
使用例
Pair<String, String> pair = Pair.create("クラスメソッド株式会社", "開発部"); Log.d(TAG, pair.first); // クラスメソッド株式会社 Log.d(TAG, pair.second); // 開発部
SparseArray
http://developer.android.com/reference/android/util/SparseArray.html
HashMap の代用として使うことができる、キーが int 型に限定された Util クラスです。 キーがプリミティブ型であるため、HashMap より処理が高速になります( put 処理に限定すると HashMap のほうが速い場合もあるようです )。キーが int 型の配列を作りたい場合は SparseArray クラスを使うようにしましょう。 また、その他に LongSparseArray 、 SparseIntArray 、 SparseBooleanArray というクラスもあるので用途に応じて使用しましょう。
使用例
SparseArray<String> array = new SparseArray<String>(); array.append(0, "クラスメソッド株式会社"); array.append(1, "アノテーション株式会社"); Log.d(TAG, array.get(0)); // クラスメソッド株式会社
FloatMath
http://developer.android.com/reference/android/util/FloatMath.html
float で各種計算を処理するメソッドの Util クラスです。 java.lang.Math の sin() や cos() などの計算に float を使用すると、 double への変換が走ってしまいますが、 android.util.FloatMath は内部で float のみ使用して計算しているので、java.lang.Math クラスより処理が高速です。メソッドの数はあまり多くありませんが、描画の計算などに使用されるような最低限のメソッドはあります。 float にしたいのであれば android.util.FloatMath のメソッドを使用するようにしましょう。
使用例
float value = 1.5f; // 切り上げ FloatMath.floor(value);
Color
http://developer.android.com/reference/android/graphics/Color.html
色を取り扱う Util クラスです。 RGB値とHEX値を相互変換するメソッドなどが含まれています。 Color.RED や Color.BLACK など色の定数値もいくつかあるので、 描画処理の実装で仮に色をつけておきたいときなどに重宝します。
使用例
// HEX値からARGBを取得 int value = 0xff008080; int a = Color.alpha(value); int r = Color.red(value); int g = Color.green(value); int b = Color.blue(value); Log.d(TAG, "alpha:" + a); // 255 Log.d(TAG, "red:" + r); // 0 Log.d(TAG, "green:" + g); // 128 Log.d(TAG, "blue:" + b); //128
ThumbnailUtils
http://developer.android.com/reference/android/media/ThumbnailUtils.html
サムネイルを生成する Util クラスです。 動画データのパスからサムネイルを生成するメソッドと、Bitmap から任意の width, height にリサイズするメソッドがあります。リサイズするメソッドはメモリ不足が発生しないようにソースとなるオブジェクトをメモリ解放するか否かのフラグをセットすることができます。
使用例
Bitmap bitmap = ThumbnailUtils.extractThumbnail(source, 200, 200, ThumbnailUtils.OPTIONS_RECYCLE_INPUT); ImageView view = (ImageView) findViewById(R.id.image_view); view.setImageBitmap(bitmap);
まとめ
他にもいろいろと Util クラスは存在しますが、便利そうなものだけ紹介しました。このような Util クラスは知っておかないと無駄な処理やクラスを増やしてしまう可能性があります。使えそうなところは Util 系のクラスに処理を任せ、ソースコードをできるだけシンプルにまとめるようにしたいですね。